package com.sise.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sise.bean.CodeMsg;
import com.sise.bean.ProductInfoBean;
import com.sise.entity.ProductInfo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author zj
 */
public interface IProductInfoService extends IService<ProductInfo> {

    /**
     * 添加一个商品
     */
    boolean save(ProductInfo productInfo);

    /**
     * 根据 productId 删除一个商品
     */
    boolean deleteById(Integer productId);

    /**
     * 删除在 productIdList 中的商品
     */
    boolean deleteByIdList(List<Integer> productIdList);

    /**
     * 根据 productId 修改一个商品
     */
    boolean updateById(ProductInfo productInfo);

    /**
     * 根据 productId 查询一个商品
     */
    ProductInfo findById(Integer productId);

    /**
     * 根据 productName 模糊查询商品列表
     */
    List<ProductInfo> findByProductNameLike(String productName);

    /**
     * 根据 storeId 查询所有上架商品列表
     */
    List<ProductInfo> findUpAll(Integer storeId);

    /**
     * 根据 storeId 查询所有下架商品列表
     */
    List<ProductInfo> findDownAll(Integer storeId);

    /**
     * 查询所有商品列表
     */
    List<ProductInfo> findAll();

    /**
     * 根据 storeId 查询所有商品列表并转换成可视列表
     */
    List<ProductInfoBean> findByStoreTransformation(Integer storeId);

    /**
     * 根据 storeId和productTypeId 查询所有上架商品列表
     */
    List<ProductInfo> findUpProductByStoreIdAndProductTypeId(Integer storeId, Integer productTypeId);

    /**
     * 加库存
     */
    boolean increaseStock(Integer productId, Integer number);

    /**
     * 减库存
     */
    boolean decreaseStock(Integer productId, Integer number);

    /**
     * 添加商品信息
     */
    CodeMsg addProductInfo(MultipartFile multipartPicture, ProductInfo productInfo);

    /**
     * 根据storeIdId获取商品信息
     */
    List<ProductInfo> findByStoreId(Integer storeId);

    /**
     * 为商品点赞
     */
    void addProductLike(Integer productId);

    /**
     * 取消点赞
     */
    void cancelProductLike(Integer productId);

    /**
     * 搜索商品
     **/
    CodeMsg<List<ProductInfo>> searchProduct(String search, Integer current);
}
